home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1833 / 1833.xpi / chrome / yoono.jar / content / yoono / aboutyoono.xul < prev    next >
Extensible Markup Language  |  2009-12-16  |  9KB  |  240 lines

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
  3.  <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  4.         onload = "init();"
  5.  >
  6.  
  7. <script>
  8.  
  9. <![CDATA[
  10. const CI = Components.interfaces;
  11. const CL = Components.classes;
  12.  
  13. const PREFS = CL["@mozilla.org/preferences-service;1"].getService(CI.nsIPrefService).getBranch("");
  14.  
  15. Components.utils.import("resource://yoono/yoonoService.js");
  16. Components.utils.import("resource://yoono/yoonoDialogs.js");
  17. Components.utils.import("resource://yoono/yoonoPrefs.js");
  18. Components.utils.import("resource://yoono/yoonoLog.js");
  19. Components.utils.import("resource://yoono/yoonoKeyValueDB.js");
  20.  
  21. var nativeJSON = Components.classes["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON);
  22.  
  23. var logPath; 
  24. var dataToImport = [];
  25.  
  26. function init() {
  27.   var file = Components.classes["@mozilla.org/file/directory_service;1"]
  28.                      .getService(Components.interfaces.nsIProperties)
  29.                      .get('ProfDS', Components.interfaces.nsIFile);
  30.   var log = file.clone();
  31.   log.append('yoono');
  32.   log.append('yoono.log');
  33.   logPath = log.path;
  34.  
  35.   var FFPath = file.path;
  36.   var labelProf = document.getElementById('profile');
  37.   var textNode =  document.createTextNode(FFPath);
  38.   labelProf.appendChild(textNode);
  39.   labelProf.setAttribute('style', '-moz-user-select:text;-moz-user-focus:normal');
  40.  
  41.   if(YOONO_LOG.isDebugEnabled()) {
  42.     var debuglevelonly = document.getElementById('debuglevelonly');
  43.     if(debuglevelonly) debuglevelonly.removeAttribute('hidden');
  44.   }
  45. }
  46.  
  47. function logout() {
  48.   YOONO_DIALOGS.traverseBrowsers(YOONO_CMPT.closeSidebar);
  49.   YOONO_PREFS.set('userid', '', YOONO_PREFS.PREF_STRING);
  50. }
  51.  
  52. function razSidebarComposition() {
  53.   YOONO_DIALOGS.traverseBrowsers(YOONO_CMPT.closeSidebar);
  54.   YOONO_KEYVALUEDB.deleteKeyValue('sidebarYoodgetList');
  55.   YOONO_DIALOGS.traverseBrowsers(YOONO_CMPT.openSidebar);
  56. }
  57.  
  58. function razYoonoButton() {
  59.   YOONO_DIALOGS.traverseBrowsers(installYoonoButton);
  60. }
  61.  
  62. function installYoonoButton(win) {
  63.   doc = win.document;
  64.   win.yoonoGlob.installYoonoButton();
  65. function sendStats () {
  66.   YOONO_CMPT.checkStats('manual');
  67. }
  68. function openKVDB () {
  69.   document.location = 'chrome://yoono/content/admin.xul';
  70. }
  71. function currentLogFile() {
  72.   document.location = 'file:///' + logPath;
  73. }
  74.  
  75. function exportGroups()  {
  76.   var reqTag = "SELECT id, is_alert, json_data, display_name from tag";
  77.   var reqTagInsert = "INSERT INTO tag (id, is_alert, json_data, display_name) VALUES (?, ?, ?, ?)";
  78.   YOONO_CMPT._globalService.storageManager.executeAsyncSql(reqTag, null, function(aResult) {
  79.     var data = aResult.getData();
  80.     var tagList = data[0];
  81.     var reqTagUser = "SELECT external_id, provider_id, tag_id from users_tags";
  82.     var reqTagUserInsert = "INSERT INTO users_tags (external_id, provider_id, tag_id) VALUES (?, ?, ?)"
  83.     YOONO_CMPT._globalService.storageManager.executeAsyncSql(reqTagUser, null, function(aResult) {
  84.       var data = aResult.getData();
  85.       var tagUsersList = data[0];
  86.       var export = [{'reqSelect': reqTag, 'data':tagList, 'reqInsert':reqTagInsert, 'reqDelete': "DELETE FROM tag"},
  87.                     {'reqSelect' : reqTagUser, 'data' : tagUsersList, 'reqInsert':reqTagUserInsert, 'reqDelete': "DELETE FROM users_tags"}
  88.                    ];
  89.       var file = Components.classes["@mozilla.org/file/directory_service;1"]
  90.                      .getService(Components.interfaces.nsIProperties)
  91.                      .get('ProfDS', Components.interfaces.nsIFile);
  92.       file.append('yoono');
  93.       file.append('groups.exp');
  94.       if(file.exists()) {
  95.         var remove = confirm("The export file 'groups.exp' exists. Overwrite ?");
  96.         if(!remove) return;
  97.         file.remove(true);
  98.       }
  99.             var fileOutputStream = CL['@mozilla.org/network/file-output-stream;1'].createInstance(CI.nsIFileOutputStream);
  100.             fileOutputStream.init(file, 0x02 | 0x08 | 0x10, 0600, 0);
  101.             var converter = CL['@mozilla.org/intl/converter-output-stream;1'].createInstance(CI.nsIConverterOutputStream);
  102.             converter.init(fileOutputStream, 'UTF-8', 1024, '-');
  103.             converter.writeString(nativeJSON.encode(export));
  104.             converter.flush();
  105.             fileOutputStream.close();
  106.  
  107.     });
  108.   });
  109. }
  110.  
  111. function importGroups() {
  112.   var file = Components.classes["@mozilla.org/file/directory_service;1"]
  113.                  .getService(Components.interfaces.nsIProperties)
  114.                  .get('ProfDS', Components.interfaces.nsIFile);
  115.   file.append('yoono');
  116.   file.append('groups.exp');
  117.   if(!file.exists()) {
  118.     alert("The export file 'groups.exp' does not exist.");
  119.     return;
  120.   }
  121.   var istream = CL["@mozilla.org/network/file-input-stream;1"].createInstance(CI.nsIFileInputStream);
  122.   istream.init(file, 0x01, 0444, 0);
  123.   var converter = CL["@mozilla.org/intl/converter-input-stream;1"].createInstance(CI.nsIConverterInputStream);
  124.   converter.init(istream, 'UTF-8', 1024, '-');
  125.   var line = {};
  126.   var buf="";
  127.   while(converter.readString(4096, line)) {
  128.     buf+=line.value;
  129.   }
  130.  
  131.   istream.close();
  132.   dataToImport = nativeJSON.decode(buf);
  133.   doImportData();
  134. }
  135. function doImportData() {
  136.   var theData = dataToImport.shift();
  137.   if(!theData || !theData.data) {
  138.     alert("Import done.");
  139.     return;
  140.   }
  141.   YOONO_CMPT._globalService.storageManager.executeAsyncSql(theData.reqDelete, null, function(aResult) {
  142.     YOONO_CMPT._globalService.storageManager.executeAsyncSql(theData.reqInsert, theData.data, function(aResult) {
  143.       doImportData();
  144.     });
  145.   });
  146.  
  147. }
  148.  
  149. function checkDB() {
  150.   YOONO_CMPT._globalService.storageManager.schemaRevisionChecker( function (aResult) {
  151.     if(aResult.fileRev == aResult.DBRev) {
  152.       alert("DB schema ok");
  153.     } else {
  154.       alert(aResult.message);  
  155.     }
  156.   });
  157. }
  158.  
  159. function compactDB() {
  160.   YOONO_CMPT._globalService.storageManager.compactStorage( function (aResult) {
  161.     alert("Done");
  162.   });
  163. }
  164.  
  165. function showAddOns() {
  166.   var themes = "\n\nInstalled themes :\n";
  167.     var aDebugInfo = 'general.useragent.extra.firefox : '+PREFS.getCharPref('general.useragent.extra.firefox')+'\n';
  168.     aDebugInfo += 'general.useragent.locale : '+PREFS.getCharPref('general.useragent.locale')+'\n\n';
  169.   aDebugInfo += 'Installed extensions :\n';
  170.   var aExtManager = CL["@mozilla.org/extensions/manager;1"].getService(CI.nsIExtensionManager);
  171.   var aItemList = aExtManager.getItemList(CI.nsIUpdateItem.TYPE_ANY, { });
  172.   for(var i in aItemList) {
  173.     if(4 != aItemList[i].type) {
  174.       aDebugInfo += aItemList[i].name+', version='+aItemList[i].version+', update-url='+aItemList[i].updateRDF+'\n';
  175.     } else {
  176.       themes += aItemList[i].name+', version='+aItemList[i].version+', update-url='+aItemList[i].updateRDF+'\n';
  177.     }
  178.   }
  179.   alert(aDebugInfo + themes);
  180. }
  181. ]]>
  182. </script>
  183.  
  184. <spacer height="20px"/>
  185. <hbox>
  186.   <label value="Profile directory : "/>
  187.   <label id="profile" />
  188. </hbox>
  189. <spacer height="20px"/>
  190. <hbox align="center">
  191.   <button label="Check DB creation vs current schema" oncommand="checkDB()"/>
  192. </hbox>
  193. <spacer height="20px"/>
  194.   <hbox align="center">
  195.   <button label="Compact DB to reclaim available disk space" oncommand="compactDB()"/>
  196. </hbox>
  197. <spacer height="20px"/>
  198. <hbox align="center">
  199.   <button label="Support Information" oncommand="showAddOns()"/>
  200. </hbox>
  201. <spacer height="20px"/>
  202. <hbox align="center">
  203.   <button label="Reset Sidebar to default widgets" oncommand="razSidebarComposition()"/>
  204. </hbox>
  205. <spacer height="20px"/>
  206. <hbox align="center">
  207.   <button label="Reset Yoono button to default position" oncommand="razYoonoButton()"/>
  208. </hbox>
  209. <spacer height="20px"/>
  210. <hbox align="center">
  211.   <button label="Current Log File" oncommand="currentLogFile()"/>
  212. </hbox>
  213.  
  214.  
  215. <vbox id="debuglevelonly" hidden="true">
  216.   <spacer height="20px"/>
  217.   <hbox align="center" id="statbox">
  218.     <button label="Send Stats" oncommand="sendStats()"/>
  219.   </hbox>
  220.   <spacer height="20px"/>
  221.   <hbox align="center">
  222.     <button label="Open KeyValue Storage (carefull!)" oncommand="openKVDB()"/>
  223.   </hbox>
  224. </vbox>
  225.  
  226. <spacer height="20px"/>
  227. <hbox align="center">
  228.   <button label="Export Groups" oncommand="exportGroups()"/>
  229.   <button label="Import Groups" oncommand="importGroups()"/>
  230. </hbox>
  231.  
  232. <!--<spacer height="20px"/>
  233. <hbox id="logout" align="center">
  234.   <button label="Logout" oncommand="logout()"/>
  235. </hbox>
  236. -->
  237. </window>
  238.  
  239.